<!DOCTYPE html>
<html lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GCC 2.95 New Features</title>
<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
</head>

<body>
<h1>GCC 2.95 New Features</h1>

<ul>
  <li> General Optimizer Improvements:
  <ul>
    <li><a href="../news/spill.html">Localized register spilling</a> to improve
    speed and code density especially on small register class machines.</li>
    <li><a href="../news/lcm.html">Global CSE using lazy code motion
    algorithms</a>.</li>
    <li><a href="../news/cprop.html">Improved global constant/copy
     propagation</a>.</li>
    <li><a href="../news/cfg.html">Improved control flow graph analysis and
     manipulation</a>.</li>
    <li><a href="../news/dse.html">Local dead store elimination</a>.</li>
    <li><a href="../news/hoist.html">Memory Load hoisting/store sinking</a>
    in loops.</li>
    <li><a href="../news/alias.html">Type based alias analysis</a> is enabled by
    default.  Note this feature will expose bugs in the Linux kernel.  Please
    refer to the FAQ (as shipped with GCC 2.95)
    for additional information on this issue.</li>
    <li>Major revamp of GIV detection, combination and simplification to
    improve loop performance.</li>
    <li>Major improvements to register allocation and reloading.</li>
  </ul></li>
  <li>New Languages and Language specific improvements
  <ul>
    <li><a href="c++features.html">Many C++ improvements</a>.</li>
    <li><a href="https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html">Many
    Fortran improvements</a>.</li>
    <li><a href="../news/gcj-announce.txt">Java</a>
    front-end has been integrated.
    A <a href="../news/javaannounce.html">runtime library</a>
    is available separately.</li>
    <li><a href="../c99status.html">ISO C99 support</a></li>
    <li><a href="../news/chill.html">Chill</a> front-end and runtime has been
    integrated.</li>
    <li>Boehm garbage collector support in libobjc.</li>
    <li>More support for various pragmas which appear in vendor include files</li>
  </ul></li>
  <li>New Targets and Target Specific Improvements
  <ul>
    <li><a href="../news/sparc.html">SPARC backend rewrite</a>.</li>
    <li>-mschedule=8000 will optimize code for PA8000 class processors;
     -mpa-risc-2-0 will generate code for PA2.0 processors</li>
    <li>Various micro-optimizations for the ia32 port. K6 optimizations</li>
    <li>Compiler will attempt to align doubles in the stack on the ia32 port</li>
    <li>Alpha EV6 support</li>
    <li>PowerPC 750</li>
    <li>RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
        -mcpu=e603e was added to do -mcpu=603e and -msoft-float.</li>
    <li>c3x, c4x</li>
    <li>HyperSPARC</li>
    <li>SparcLite86x</li>
    <li>sh4</li>
    <li>Support for new systems (OpenBSD, FreeBSD, UWIN, Interix, arm-linux)</li>
    <li>vxWorks targets include support for vxWorks threads</li>
    <li>StrongARM 110 and ARM9 support added.  ARM Scheduling parameters
    rewritten.</li>
    <li>Various changes to the MIPS port to avoid assembler macros, which
    in turn improves performance</li>
    <li>Various performance improvements to the i960 port.</li>
    <li>Major rewrite of ns32k port</li>
  </ul></li>
  <li>Other significant improvements
  <ul>
    <li><a href="../news/egcs-vcg.html">Ability to dump cfg information and
    display it using vcg</a>.</li>
    <li>The new faster scheme for fixing vendor header files is enabled by
    default.</li>
    <li>Experimental internationalization support.</li>
    <li>multibyte character support</li>
    <li>Some compile-time speedups for pathological problems</li>
    <li>Better support for complex types</li>
  </ul></li>
  <li>Plus the usual mountain of bugfixes</li>
  <li>Core compiler is based on the gcc2 development tree from Sept 30, 1998,
  so we have all of the <a href="../egcs-1.0/features-2.8.html">features
  found in GCC 2.8</a>.</li>
</ul>

<h2>Additional Changes in GCC 2.95.1</h2>

<ul>
  <li> Generic bugfixes and improvements
    <ul>
	<li> Various documentation fixes related to the GCC/EGCS merger.</li>
	<li> Fix memory management bug which could lead to spurious aborts, core
	     dumps or random parsing errors in the compiler.</li>
  	<li> Fix a couple bugs in the dwarf1 and dwarf2 debug record support.</li>
	<li> Fix infinite loop in the CSE optimizer.</li>
	<li> Avoid undefined behavior in compiler FP emulation code</li>
	<li> Fix install problem when prefix is overridden on the make install
	     command.</li>
	<li> Fix problem with unwanted installation of assert.h on some systems.</li>
	<li> Fix problem with finding the wrong assembler in a single tree
	     build.</li>
	<li> Avoid increasing the known alignment of a register that is
	     already known to be a pointer.</li>
     </ul></li>
  <li> Platform specific bugfixes and improvements
    <ul>
	<li> Codegen bugfix for prologue/epilogue for cpu32 target.</li>
	<li> Fix long long code generation bug for the Coldfire target.</li>
	<li> Fix various aborts in the SH compiler.</li>
	<li> Fix bugs in libgcc support library for the SH.</li>
	<li> Fix alpha ev6 code generation bug.</li>
	<li> Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on AIX
	      platforms.</li>
	<li> Fix -fpic code generation bug for rs6000/ppc svr4 targets.</li>
 	<li> Fix varargs/stdarg code generation bug for rs6000/ppc svr4 targets.</li>
	<li> Fix weak symbol handling for rs6000/ppc svr4 targets.</li>
	<li> Fix various problems with 64bit code generation for the rs6000/ppc
	     port.</li>
        <li> Fix codegen bug which caused tetex to be mis-compiled on the x86.</li>
	<li> Fix compiler abort in new cfg code exposed by x86 port.</li>
	<li> Fix out of range array reference in code convert flat
	     registers to the x87 stacked FP register file.</li>
	<li> Fix minor vxworks configuration bug.</li>
	<li> Fix return type of bsearch for SunOS 4.x.</li>
    </ul></li>
  <li> Language &amp; Runtime specific fixes.
    <ul>
	<li> The G++ signature extension has been deprecated.  It will be
	     removed in the next major release of G++.  Use of signatures
	     will result in a warning from the compiler.</li>
	<li> Several bugs relating to templates and namespaces were fixed.</li>
	<li> A bug that caused crashes when combining templates with -g
	     on DWARF1 platforms was fixed.</li>
	<li> Pointers-to-members, virtual functions, and multiple
	     inheritance should now work together correctly.</li>
	<li> Some code-generation bugs relating to function try blocks
	     were fixed.</li>
	<li> G++ is a little bit more lenient with certain archaic
	     constructs than in GCC 2.95.</li>
	<li> Fix to prevent shared library version #s from bring truncated
	     to 1 digit</li>
	<li> Fix missing std:: in the libstdc++ library.</li>
	<li> Fix stream locking problems in libio.</li>
	<li> Fix problem in java compiler driver.</li>
    </ul></li>
</ul>

<h2>Additional Changes in GCC 2.95.2</h2>

<p>The -fstrict-aliasing is not enabled by default for GCC 2.95.2.  While the
optimizations performed by -fstrict-aliasing are valid according to the C and
C++ standards, the optimization have caused some problems, particularly with
old non-conforming code.</p>

<p>The GCC developers are experimenting with ways to warn users about code
which violates the C/C++ standards, but those warnings are not ready for
widespread use at this time.  Rather than wait for those warnings the GCC
developers have chosen to disable -fstrict-aliasing by default for the
GCC 2.95.2 release.</p>

<p>We <strong>strongly</strong> encourage developers to find and fix
code which violates the C/C++ standards as -fstrict-aliasing may be
enabled by default in future releases.  Use the option
-fstrict-aliasing to re-enable these optimizations.</p>


<ul>
  <li> Generic bugfixes and improvements
    <ul>
	<li>Fix incorrectly optimized memory reference in global common
	    subexpression elimination (GCSE) optimization pass.</li>
	<li>Fix code generation bug in regmove.c in which it could
	    incorrectly change a "const" value.</li>
	<li>Fix bug in optimization of conditionals involving volatile
	    memory references.</li>
	<li>Avoid over-allocation of stack space for some procedures.</li>
	<li>Fixed bug in the compiler which caused incorrect optimization
	    of an obscure series of bit manipulations, shifts and arithmetic.</li>
	<li>Fixed register allocator bug which caused teTeX to be mis-compiled
	    on SPARC targets.</li>
	<li>Avoid incorrect optimization of degenerate case statements for
	    certain targets such as the ARM.</li>
	<li>Fix out of range memory reference in the jump optimizer.</li>
	<li>Avoid dereferencing null pointer in fix-header.</li>
	<li>Fix test for GCC specific features so that it is possible
	    to bootstrap with gcc-2.6.2 and older versions of GCC.</li>
	<li>Fix typo in scheduler which could potentially cause out of
	    range memory accesses.</li>
	<li>Avoid incorrect loop reversal which caused incorrect code for
	    certain loops on PowerPC targets.</li>
	<li>Avoid incorrect optimization of switch statements on certain
	    targets (for example the ARM).</li>
     </ul></li>
  <li>Platform specific bugfixes and improvements
    <ul>
	<li>Work around bug in Sun V5.0 compilers which caused bootstrap
	    comparison failures on SPARC targets.</li>
	<li>Fix SPARC backend bug which caused aborts in final.c.</li>
	<li>Fix sparc-hal-solaris2* configuration fragments.</li>
	<li>Fix bug in sparc block profiling.</li>
	<li>Fix obscure code generation bug for the PARISC targets.</li>
	<li>Define __STDC_EXT__ for HPUX configurations.</li>
	<li>Various POWERPC64 code generation bugfixes.</li>
	<li>Fix abort for PPC targets using ELF (ex GNU/Linux).</li>
	<li>Fix collect2 problems for AIX targets.</li>
	<li>Correct handling of .file directive for PPC targets.</li>
	<li>Fix bug in fix_trunc x86 patterns.</li>
	<li>Fix x86 port to correctly pop the FP stack for functions that
	    return structures in memory.</li>
	<li>Fix minor bug in strlen x86 pattern.</li>
	<li>Use stabs debugging instead of dwarf1 for x86-solaris targets.</li>
	<li>Fix template repository code to handle leading underscore
	    in mangled names.</li>
	<li>Fix weak/weak alias support for OpenBSD.</li>
	<li>GNU/Linux for the ARM has C++ compatible include files.</li>
    </ul></li>
  <li> Language &amp; Runtime specific fixes.
    <ul>
	<li>Fix handling of constructor attribute in the C front-end
	    which caused problems building the Chill runtime library
	    on some targets.</li>
	<li>Fix minor problem merging type qualifiers in the C front-end.</li>
	<li>Fix aliasing bug for pointers and references (C/C++).</li>
	<li>Fix incorrect "non-constant initializer bug" when
	    -traditional or -fwritable-strings is enabled.</li>
	<li>Fix build error for Chill front-end on SunOS.</li>
	<li>Do not complain about duplicate instantiations when using
	    -frepo (C++).</li>
	<li>Fix array bounds handling in C++ front-end which caused
	    problems with dwarf debugging information in some circumstances.</li>
	<li>Fix minor namespace problem.</li>
	<li>Fix problem linking java programs.</li>
    </ul></li>
</ul>

<h2>Additional Changes in GCC 2.95.3</h2>

<ul>
  <li> Generic bugfixes and improvements
    <ul>
	<li>Fix numerous problems that caused incorrect optimization in the
	    register reloading code.</li>
	<li>Fix numerous problems that caused incorrect optimization in the
	    loop optimizer.</li>
	<li>Fix aborts in the functions build_insn_chain and scan_loops
	    under some circumstances.</li>
	<li>Fix an alias analysis bug.</li>
	<li>Fix an infinite compilation bug in the combiner.</li>
	<li>A few problems with complex number support have been fixed.</li>
	<li>It is no longer possible for gcc to act as a fork bomb when
	    installed incorrectly.</li>
	<li>The -fpack-struct option should be recognized now.</li>
	<li>Fixed a bug that caused incorrect code to be generated due to
	    a lost stack adjustment.</li>
     </ul></li>
  <li>Platform specific bugfixes and improvements
    <ul>
	<li>Support building ARM toolchains hosted on Windows.</li>
	<li>Fix attribute calculations in ARM toolchains.</li>
	<li>arm-linux support has been improved.</li>
	<li>Fix a PIC failure on sparc targets.</li>
	<li>On ix86 targets, the regparm attribute should now work reliably.</li>
	<li>Several updates for the h8300 port.</li>
	<li>Fix problem building libio with glibc 2.2.</li>
    </ul></li>
</ul>

</body>
</html>
